package com.dz.risk.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dz.risk.pojo.domain.ReportFormsDataValueEntity;
import com.dz.risk.pojo.model.FormulaExtModel;
import com.dz.risk.pojo.model.InportFormulaModel;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.List;

/**
 * 报表数据值
 *
 * @author baohan
 * @email
 * @date 2021-07-05 14:49:45
 */
public interface ReportFormsDataValueService extends IService<ReportFormsDataValueEntity> {

    /**
     * 根据报表ID删除报表指标数据
     *
     * @param reportFormsId 报表ID
     * @return 删除的条数
     */
    int deleteByReportFormsId(String reportFormsId);

    /**
     * 根据参数查询该报表版本得模板数据内容
     *
     * @param reportFormsSerialNumber 报表编号
     * @param reportFormsBeginDate    开始时间
     * @param reportFormsEndDate      结束时间时间
     * @return 报表数据值集合
     */
    List<ReportFormsDataValueEntity> selectDynamicExcelVersion(String reportFormsSerialNumber, Date reportFormsBeginDate, Date reportFormsEndDate);

    /**
     * 根据参数查询报表数据内容集合
     *
     * @param reportFormsDataValueEntity 报表数据内容实体
     * @return 报表数据内容集合
     */
    List<ReportFormsDataValueEntity> selectByParams(ReportFormsDataValueEntity reportFormsDataValueEntity);

    /**
     * 根据报表ID获取该报表模板数据
     *
     * @param reportFormsId 报表ID
     * @return 报表数据值集合
     */
    List<ReportFormsDataValueEntity> selectReportTemplateByReportFormsId(String reportFormsId);

    /**
     * 根据ID更新单元格公式
     *
     * @param formulaExtModel 公式扩展模型
     * @return 跟新条数
     */
    int updateFormulaById(FormulaExtModel formulaExtModel);

    /**
     * 根据报表版本以及单元格编号查询报表数据值
     *
     * @param tableCellSerialNumber 单元格编号
     * @param beginDate             报表开始时间
     * @param endDate               报表结束时间
     * @param dateValueVersion      数据值版本
     * @return 报表数据值集合
     */
    List<ReportFormsDataValueEntity> selectByReportFormsVersionAndIndexNumber(String tableCellSerialNumber, Date beginDate, Date endDate, Date dateValueVersion);

    /**
     * 根据单元格编号查询数据值不为空的数据
     *
     * @param tableCellSerialNumber 单元格编号
     * @return 报表数据值集合
     */
    List<ReportFormsDataValueEntity> selectByCellSerialNumberAndDataValueIsNotNull(String tableCellSerialNumber);

    /**
     * 删除报表下相同版本的报表计算数据
     *
     * @param reportFormsId    报表ID
     * @param dataValueVersion 数据值版本
     */
    void deleteByReportFormsIdAndVersion(String reportFormsId, Date dataValueVersion);

    /**
     * 查询报表计算版本数据
     *
     * @param reportFormsId 报表ID
     * @param version       版本
     * @return
     */
    List<List<ReportFormsDataValueEntity>> selectReportFormsDataValueByVersion(String reportFormsId, Date version);

    /**
     * 根据参数查询该报表版本得模板数据内容
     *
     * @param reportFormsSerialNumber 报表编号
     * @param reportFormsBeginDate    开始时间
     * @param reportFormsEndDate      结束时间时间
     * @return 报表数据值集合
     */
    List<List<ReportFormsDataValueEntity>> selectReportFormsDataValueByVersionAndSerialNumber(String reportFormsSerialNumber, Date reportFormsBeginDate, Date reportFormsEndDate);

    /**
     * 根据编号查询该编号以往的公式集合
     *
     * @param reportFormsSerialNumber 单元格编号
     * @return 数据值集合集合
     */
    List<ReportFormsDataValueEntity> selectFormula(String reportFormsSerialNumber);

    /**
     * 设置报表公式
     *
     * @param result
     * @param request
     * @return
     */
    void setUpTheFormula(List<InportFormulaModel> result, HttpServletRequest request);

    /**
     * @param tableCellSerialNumber
     * @param calculatingTime
     * @return
     */
    List<ReportFormsDataValueEntity> selectBySerialNumberAndVersion(String tableCellSerialNumber, Date calculatingTime);

    /**
     * 根据计算版本删除报表计算数据
     *
     * @param calculatingTime 计算时间版本
     */
    void deleteByVersion(Date calculatingTime);

    void doExportReportFormsDataValueByVersion(HttpServletResponse response, String reportFormsId, Date version) throws IOException;
}
